#include "../head.h"

// 线程的分离属性  不需要其他线程去回收（接合）自己的资源  但是主线程结束其他线程依旧会结束
// 设置分离属性有两种方法；第一种先设置属性，然后在创建线程的时候应用该属性  第二种先创建线程，然后设置属性

void *thread_func(void *arg)
{
    sleep(1);
    printf("子线程\n");
}

int main()
{
    printf("主线程\n");
    // ===============================================方法一===================0=========================================
    // 设置分离属性，然后在创建线程的时候应用该属性
    pthread_attr_t attr;
    // 初始化属性
    pthread_attr_init(&attr);
    // PTHREAD_CREATE_DETACHED分离属性  PTHREAD_CREATE_JOINABLE非分离属性
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

    pthread_t thread;
    pthread_create(&thread, &attr, thread_func, NULL);
    // 销毁属性
    pthread_attr_destroy(&attr);
    // ================================================方法二===================0=========================================
    // 创建线程，然后设置属性
    pthread_t thread2;
    pthread_create(&thread2, NULL, thread_func, NULL);
    pthread_detach(thread2);


    int ret = pthread_join(thread, NULL); // 对具有分离属性的线程没有效果 不会进行阻塞
    printf("ret = %d\n", ret);
    sleep(2);
    printf("主线程结束\n");
    return 0;
}